A computing device generally executes an operating system that provides a common interface with which a user may interact with the hardware components of the computing device. Via this operating system interface, the user may configure hardware of the computing device, store data (such as photos, videos, computer programs, documents, etc.) to file systems maintained by the operating system and mapped to storage units and/or memories of the computing device, install computer programs that generally execute within an execution environment presented by the operating system, initiate the execution of the various installed computer programs and generally operate or otherwise control the computing device in a wide variety of ways.
Modern operating systems generally include a number of components or modules, including a so-called “kernel,” memory manager, file system manager, network stack manager, libraries, device drivers and graphical user interface (GUI) module to name a few examples. Of these components, the kernel represents what is commonly considered as the core component that provides, with the aid of firmware and device drivers, the most basic or core level of control over the various hardware components of the computing device. The kernel may provide a level of abstraction of the physical hardware to allow programs to execute on a variety of different physical hardware implementations. In some operating system implementations, various components described as being separate from the kernel, such as the memory manager, file system manager, network stack manager and GUI module, may be integrated into the kernel to provide these core functions.
Typically, a set portion of underlying hardware resources, such as a portion of one or more memories and processor cycles, are allocated for use by the kernel. As kernels are changed over time, various features may be added or optimization may be performed with respect to the kernel, often in the form of patches or updates. As a result of these changes, the kernel may begin to incrementally utilize more hardware resources with the result that hardware resources available for non-kernel programs have decreased. Users of the computing device may eventually notice this decrease in available hardware resources (meaning hardware resources that are available for use by the user and not allocated for use by the kernel), requesting that the decrease in available hardware resources be fixed. Yet, attempting to identify and overcome issues involving kernel hardware resource use is a difficult, time intensive process as modern kernels have become significantly more complicated and provide little, if any, feedback or other type of debugging information that enable identification of issues involving kernel hardware resource use.